// 时间格式化工具函数
import dayjs from 'dayjs';

/**
 * 格式化时间戳
 * @param {number|string} timestamp - 时间戳
 * @param {string} format - 格式化字符串，默认 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的时间字符串
 */
export const formatTimestamp = (timestamp, format = 'YYYY-MM-DD HH:mm:ss') => {
    if (!timestamp) return '-';

    if (typeof timestamp === 'number') {
        // 如果是10位数字，说明是秒级时间戳
        if (timestamp.toString().length === 10) {
            return dayjs.unix(timestamp).format(format);
        }
        // 如果是13位数字，说明是毫秒级时间戳
        else if (timestamp.toString().length === 13) {
            return dayjs(timestamp).format(format);
        }
    }
    // 处理字符串格式的时间
    return dayjs(timestamp).format(format);
};

/**
 * 格式化倒计时显示 (HH:MM:SS)
 * @param {number} seconds - 总秒数
 * @returns {string} 格式化的倒计时字符串
 */
export const formatCountdown = (seconds) => {
    const hours = Math.floor(seconds / 3600);
    const minutes = Math.floor((seconds % 3600) / 60);
    const remainingSeconds = seconds % 60;

    if (hours > 0) {
        return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
    }
    return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
};

/**
 * 格式化时间间隔显示
 * @param {number} seconds - 总秒数
 * @returns {string} 友好的时间间隔字符串
 */
export const formatInterval = (seconds) => {
    if (seconds >= 3600) {
        const hours = Math.floor(seconds / 3600);
        const minutes = Math.floor((seconds % 3600) / 60);
        return minutes > 0 ? `${hours}小时${minutes}分钟` : `${hours}小时`;
    } else if (seconds >= 60) {
        const minutes = Math.floor(seconds / 60);
        const remainingSeconds = seconds % 60;
        return remainingSeconds > 0 ? `${minutes}分钟${remainingSeconds}秒` : `${minutes}分钟`;
    } else {
        return `${seconds}秒`;
    }
};

/**
 * 格式化数值显示
 * @param {number} value - 数值
 * @param {number} divisor - 除数，默认100
 * @param {number} decimals - 小数位数，默认1
 * @param {string} unit - 单位，默认''
 * @returns {string} 格式化后的数值字符串
 */
export const formatValue = (value, divisor = 100, decimals = 1, unit = '') => {
    if (!value && value !== 0) return '-';
    return `${(value / divisor).toFixed(decimals)}${unit}`;
};

/**
 * 格式化文件大小
 * @param {number} bytes - 字节数
 * @returns {string} 格式化的文件大小字符串
 */
export const formatFileSize = (bytes) => {
    if (bytes === 0) return '0 B';

    const k = 1024;
    const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));

    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
};
